package com.blue.tooth.lock.util;

import com.meihua.passivelock.BLETools;
import com.meihua.passivelock.TaskDataVo;

/**
 * author: jiangliqiang
 * date:   2020/09/23
 * <p>
 * 以下方法需要蓝牙连成功后才能调用，此类仅用于讲解各个协议参数的含义，正式使用可直接在activity调用 BLETools 类中的相关方法即可
 */
public class BleSendDataUtil {

    /**
     * 初始化锁具
     *
     * @param bleTools
     * @param lockCode 锁的初始Mac,长度为 32 个字符, 由数字，字母组成
     *                 执行该方法后，蓝牙钥匙的指示灯会闪烁，将钥匙插入锁中即可
     *                 执行结果参考：ConnectKeyAct 类中的initLockCallBack回调
     */
    public static void initLock(BLETools bleTools, String lockCode) {

        /**
         * lockCode生成规则,长度为 32 个字符，由数字，字母组成，(如 0033:0001:0008:0000:1d25:0000:0000:0000 冒号分隔符只是为了方便阅读)
         * 一:前16个字符，由锁安装地的 省市区镇  编码组成（区域编码参考地址:http://www.ip33.com/area/2019.html）目前所有镇默认0000
         *    如：浙江省杭州市滨江区编码为330108 , 33 代表省，01 代表市，08 代表区，在省市区前加上00，组成以下字符串 0033:0001:0008:0000
         * 二:17-20字符，是4位随机数 如:1d25
         * 三:21-28目前设置0000:0000即可
         * 四:29-32当前区域下的锁具总数量，建议由1开始递增 0000
         * */
        lockCode = lockCode.replaceAll(":", "");//去除锁code的间隔符号
        bleTools.initLock(lockCode);
    }


    /**
     * 蓝牙连接成功后，将用户id与蓝牙钥匙进行绑定
     *
     * @param bleTools
     * @param userId   用户id，长度为4个字节，建议取值范围0-65535(授权，清空锁芯 传递的用户id要和此处的值一致，不然会失败)
     *                 执行结果参考：ConnectKeyAct 类中的bindKeyCallback回调
     */
    public static void bindKey(BLETools bleTools, String userId) {
        if (null != userId && userId.length() <= 7) {
            bleTools.bindKey(userId);
        }
    }

    //校验锁的时间
    public static void setKeyTime(BLETools bleTools) {
        bleTools.setKeyTime();
    }

    //获取电量
    public static void getElectricity(BLETools bleTools) {
        bleTools.getElectricity();
    }

    /**
     * 授权钥匙开锁，钥匙在startTime  -  endTime 时间段才能开锁
     *
     * @param bleTools
     * @param userId    开锁用户的id，长度为4个字节，建议取值范围0-65535(此处的值要和bindKey时一致，不然会操作失败)
     * @param lockCode  锁32位长度的code
     * @param keyMac    当前已连接钥匙的mac
     * @param startTime 格式20200922120000
     * @param endTime   格式20201022120000
     *                  执行结果参考：ConnectKeyAct 类中的 authKeyCallBack方法
     */
    public static void authAction(BLETools bleTools, String userId, String lockCode, String keyMac, String startTime, String endTime) {
        TaskDataVo taskDataVo = new TaskDataVo();
        taskDataVo.userId = userId;
        taskDataVo.lockcode = lockCode;
        taskDataVo.bluetoothAddress = keyMac;
        taskDataVo.authstarttimevo = startTime;
        taskDataVo.authstoptimevo = endTime;
        taskDataVo.executetype = 1 + "";//直接设置为1即可
        bleTools.authAction(taskDataVo);
    }

    /**
     * 清除授权
     * 由于锁并未返回，当前是授权还是清除授权，所以activity需要自己管理操作类型
     * 执行结果参考：ConnectKeyAct 类中的 authKeyCallBack方法
     */
    public static void cleanAuth(BLETools bleTools) {
        bleTools.cleanAuth();
    }

    /***
     * 获取日志
     * 执行结果参考：ConnectKeyAct 类中的 authKeyCallBack方法
     * */
    public static void getKeyLogCallBack(BLETools bleTools) {
        bleTools.getLockLog();
    }

    /**
     * 清空锁芯
     *
     * @param lockCode 需要清除锁的已知lockCode,长度为 32 个字符
     * @param keyMac   当前已连接钥匙的mac
     * @param userId   用户id，长度为4个字节，建议取值范围0-65535(此处的值要和bindKey时一致，不然会操作失败)
     */
    public static void resetLock(BLETools bleTools, String lockCode, String keyMac, String userId) {
        lockCode = lockCode.replaceAll(":", "");//去除锁code的间隔符号
        if (keyMac != null) {
            keyMac = keyMac.replaceAll(":", "");
            bleTools.resetLock(lockCode, keyMac, userId);
        }

    }

    /**
     * @param workMode 工作模式 0：离线，1：在线
     */
    public static void setWorkMode(BLETools bleTools, int workMode) {
        bleTools.setWorkMode(workMode);
    }

    ;

}

